package com.webwork.common.util;

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import org.apache.commons.lang3.StringUtils;

/**
 * 字符串工具类
 *
 */
public final class StrUtil {

	public static final String SEPERATOR = "|";
	
	/**
	 * replaceAll("\\s*", "")可以替换大部分空白字符<br>
	 * 不限于空格 \s 可以匹配空格、制表符、换页符等空白字符的其中任意一个
	 * replaceAll("　", "")用于替换全角的空格字符
	 * @param str
	 * @return
	 */
	public static String replaceSpace(String str, String target) {
		if (str == null) {
			return null;
		}
		return str.replaceAll("\\s*", target).replaceAll("　", target);
	}
	
	/**
     * 是否包含字符串
     * 
     * @param str 验证字符串
     * @param strs 字符串组
     * @return 包含返回true
     */
	public static boolean inStringIgnoreCase(String str, String... strs) {
		if (!StringUtils.isEmpty(str) && strs != null) {
			for (String s : strs) {
				if (!StringUtils.isEmpty(s)) {
					if (str.equalsIgnoreCase(s.trim())) {
						return true;
					}
				}
			}
		}
		return false;
	}
	
	/**
	 * 判断是否含有中文
	 * @param str
	 * @return
	 */
	public static boolean isChineseChar(String str) {
		boolean temp = false;
		Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
		Matcher m = p.matcher(str);
		if (m.find()) {
			temp = true;
		}
		return temp;
	}

	/**
	 * 判断是否为数字字符，不是则返回true ,是则返回false
	 * 
	 * @param str
	 * @return
	 */
	public static boolean notNumberStr(String str) {
		char[] c = str.toCharArray();
		for (int i = 0; i < c.length; i++) {
			if (!isNumberic(c[i])) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 判断该字符是否为数学字符（含小数点），是则返回true，不是则返回false
	 * 
	 * @param c
	 * @return
	 */
	private static boolean isNumberic(char c) {
		if ((c >= '0' && c <= '9') || c == '.') {
			return true;
		}
		return false;
	}
	
	/**
	 * 拼接字符串(默认添加"|"作为拼接符)
	 * @param seperator
	 * @param strs
	 * @return
	 */
	public static String concatKey(Object... strs) {
		return Arrays.stream(strs).map(e -> String.valueOf(e)).collect(Collectors.joining(SEPERATOR));
	}
	
	/**
	 * 拼接字符串, 可使用自定义拼接符, 来拼接
	 * @param seperator
	 * @param strs
	 * @return
	 */
	public static String concat(StringBuilder seperator, Object... strs) {
		String sep = (null == seperator)? SEPERATOR : seperator.toString();
		return Arrays.stream(strs).map(e -> String.valueOf(e)).collect(Collectors.joining(sep));
	}
	
}
